﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;
using DTO;
using System.Data;
using System.IO;
using System.Globalization;

namespace GUI.Admin.uc
{
    public partial class Ad_HinhAnhUC : System.Web.UI.UserControl
    {
        #region Khai báo
        private HinhAnhBLL _haBLL;
        private List<HinhAnhDTO> _lst;
        private HinhAnhDTO _haDTO;
        #endregion

        #region Page_Load
        protected void Page_Load(object sender, EventArgs e)
        {
            /*
             * Khi Form load thì thực hiện các thao tác sau:
             * 1. Hiển thị Panel danh sách hình ảnh
             * 2. Ẩn Panel thêm, sửa thông tin hình ảnh
             * 3. Load dữ liệu vào Gridview
             * 4. Hiển thị tổng số hình ảnh vào Label
             */
            if (!IsPostBack)
            {
                try
                {
                    // Load data vào gridview
                    this.LoadDuLieu();
                }
                catch (Exception ex)
                {
                    Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
                }
            }

        }
        #endregion

        #region LoadDuLieu
        private void LoadDuLieu()
        {

            _haBLL = new HinhAnhBLL();

            // Load tất cả hình ảnh
            _lst = new List<HinhAnhDTO>();
            try
            {
                this.HiddenFieldMaSanPham.Value = Request.QueryString["masp"];
                _lst = _haBLL.GetListHinhAnhTheoMaSanPham(this.HiddenFieldMaSanPham.Value);

                foreach (var item in _lst)
                {
                    if (item.TenHinhAnh == "")
                        item.TenHinhAnh = "product_default_large.jpg";

                    if (item.HaConfirm == 1)
                    {
                        Session["HinhAnh"] = item;
                        break;
                    }
                }

                GridViewHinhAnh.DataSource = _lst;
                GridViewHinhAnh.DataBind();

                // Hiển thị tổng số hình ảnh vào Label

                this.LabelTongSoHinhAnh.Text = Convert.ToString(_lst.Count);
                // Xử lý trên lưới để lấy cái tên hình mặc định


                // Loop qua từng object trong list, nếu là hình mặc định thì dừng
                // Gán hình hình ảnh vào image, nếu ko có gán hình mặc định
                _haDTO = (HinhAnhDTO)Session["HinhAnh"];
                if (_haDTO != null)
                {
                    if (_haDTO.TenHinhAnh != "")
                        this.ImageHinhAnhMacDinh.ImageUrl = "../../Images/" + _haDTO.TenHinhAnh;
                    else
                        this.ImageHinhAnhMacDinh.ImageUrl = "../../Images/" + "product_default_large.jpg";
                }
                else
                    this.ImageHinhAnhMacDinh.ImageUrl = "../../Images/" + "product_default_large.jpg";
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region ButtonTroLai_Click
        protected void ButtonTroLai_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("SanPham.aspx");
        }
        #endregion

        #region btnLuu_Click
        protected void btnLuu_Click(object sender, EventArgs e)
        {
            try
            {
                string _filename = this.FileUploadHinhAnh.FileName;
                if (FileUploadHinhAnh.HasFile)
                {
                    // Kiểm tra việc nhập file đúng kích thước <= 3MB                        

                    if (this.FileUploadHinhAnh.PostedFile.ContentLength > 3145728)
                    {
                        this.LabelFileSize.Text = "(*) Kích cỡ ảnh vượt quá 3MB.";
                        return;
                    }

                    // Đổi tên file trước khi lưu
                    string[] strArray = _filename.Split('.');

                    // Tên ảnh                                                        
                    string name = strArray[0];

                    // Lấy ngày giờ hiện tại
                    //string dt = DateTime.Now.ToString();
                    string dt = "";

                    // Ngày
                    dt += DateTime.Now.Day.ToString();

                    // Tháng
                    dt += DateTime.Now.Month.ToString();

                    // Năm
                    dt += DateTime.Now.Year.ToString();

                    // Giờ 
                    dt += DateTime.Now.Hour.ToString();

                    // Phút 
                    dt += DateTime.Now.Minute.ToString();

                    // Giây
                    dt += DateTime.Now.Second.ToString();

                    name += dt;

                    // Đuôi ảnh
                    string tail = strArray[1];

                    // Gán trở lại _filename
                    _filename = name + "." + tail;
                }

                // Lưu vào database
                // Object hình ảnh
                _haBLL = new HinhAnhBLL();
                _haDTO = new HinhAnhDTO();

                _haDTO.MaSanPham = this.HiddenFieldMaSanPham.Value;
                _haDTO.TenHinhAnh = _filename;

                // Kiểm tra checkbox có check ko?
                //  Nếu có thì gán hình đó là hình mặc định
                //      Cập nhật lại hình mặc định ban đầu thành giá trị 0 (Ko phải là hình mặc định)
                //  else
                //      Lưu bình thường với giá trị mặc định = 0
                // Lưu ý: 0: là qui định hình ko mặc định, 1: là qui định hình mặc định
                if (CheckBoxDefault.Checked == true)
                {
                    _haDTO.HaConfirm = 1; // Giá trị 1 --> Là hình mặc định
                }
                else // Trường hợp thông thường
                {
                    _haDTO.HaConfirm = 0; // Giá trị 0 --> Ko phải hình mặc định
                }

                if (_haBLL.Them(_haDTO) != -1)
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Thêm mới thành công');", true);

                    // Lưu hình vào thư mục hình - 1 file hình = tên file hình + đuôi file                        
                    FileUploadHinhAnh.SaveAs(Server.MapPath("../Images\\") + _filename);

                    if (CheckBoxDefault.Checked == true)
                    {
                        // Cập nhật hình mặc định ban đầu lại giá trị 0
                        // Lấy lại các giá trị ban đầu của hình mặc định ban đầu
                        _haDTO = new HinhAnhDTO();
                        //_haBLL = new HinhAnhBLL();

                        _haDTO = (HinhAnhDTO)Session["HinhAnh"];
                        if (_haDTO != null)
                        {
                            _haDTO.HaConfirm = 0;
                            _haBLL.Sua(_haDTO);
                            Session["HinhAnh"] = null;
                        }
                    }

                    // Load data vào gridview
                    this.LoadDuLieu();
                }
                else
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Thêm mới không thành công. Xin kiểm tra lại thông tin');", true);
                }
                return;
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewHinhAnh_PageIndexChanging
        protected void GridViewHinhAnh_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                GridViewHinhAnh.PageIndex = e.NewPageIndex;
                this.LoadDuLieu();
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewHinhAnh_RowDataBound
        protected void GridViewHinhAnh_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if (e.Row.RowIndex >= 0)
                {
                    e.Row.Attributes.Add("onMouseOver", "this.style.backgroundColor='#bde2fd'");

                    if (e.Row.RowIndex % 2 == 0)
                        e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='#EFF3FB'");
                    else
                        e.Row.Attributes.Add("onMouseOut", "this.style.backgroundColor='White'");

                }
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region GridViewHinhAnh_RowDeleting
        protected void GridViewHinhAnh_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            _haBLL = new HinhAnhBLL();
            _haDTO = new HinhAnhDTO();

            try
            {
                Label maha = (Label)GridViewHinhAnh.Rows[e.RowIndex].FindControl("LabelMaHinhAnh");
                _haDTO = _haBLL.GetHinhAnh(Convert.ToInt32(maha.Text));
                if (_haBLL.Xoa(_haDTO) == 1)
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Đã xóa thành công');", true);

                    if (_haDTO.TenHinhAnh != "" && _haDTO.TenHinhAnh != "product_default_large.jpg")
                    {
                        // Xóa luôn file ảnh trong thư mục ảnh
                        this.DeleteFile(Server.MapPath("../Home/imagesSP\\") + _haDTO.TenHinhAnh);

                        Session["HinhAnh"] = null;
                    }
                    this.LoadDuLieu();
                }
                else
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Xóa không thành công');", true);
                }
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion

        #region Phương thức xóa một file trong 1 thư mục
        /// <summary>
        /// Phương thức xóa một file trong 1 thư mục
        /// </summary>
        /// <param name="fileName">fileName</param>
        private void DeleteFile(string fileName)
        {
            try
            {
                FileInfo fi;
                if (System.IO.File.Exists(fileName) == true)
                {
                    fi = new FileInfo(fileName);
                    fi.Delete();
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region ImageButtonXoa_Click
        protected void ImageButtonXoa_Click(object sender, ImageClickEventArgs e)
        {
            _haBLL = new HinhAnhBLL();
            try
            {
                int _flag = 0;
                // Khi button xóa được click:
                // Lấy danh sách mã hình ảnh từ List<>
                // Loop từng mã hình ảnh và xóa

                _lst = new List<HinhAnhDTO>();
                int _n = GridViewHinhAnh.Rows.Count;
                for (int i = 0; i < _n; i++)
                {
                    _haDTO = new HinhAnhDTO();
                    GridViewRow _gvr = GridViewHinhAnh.Rows[i];
                    bool _ischecked = ((CheckBox)_gvr.Cells[0].FindControl("CheckBoxItem")).Checked;
                    if (_ischecked == true) // Dòng đó được check
                    {
                        _flag = 1; // Xác nhận checkbox có check
                        // Tìm mã hình ảnh
                        Label _maha = (Label)_gvr.Cells[0].FindControl("LabelMaHinhAnh");

                        //_haDTO.MaHinhAnh = _maha.Text;
                        _haDTO = _haBLL.GetHinhAnh(int.Parse(_maha.Text));

                        // Lưu vào list
                        this._lst.Add(_haDTO);
                    }
                }

                if (_flag == 1)
                {
                    // Tới đây là ta đã có 1 List<int> mã hình ảnh
                    // Loop all, gọi hàm xóa 1 hình ảnh
                    _haBLL = new HinhAnhBLL();
                    string _id = "";

                    int _n2 = this._lst.Count;
                    for (int i = 0; i < _n2; i++)
                    {
                        // Xóa dữ liệu
                        _haBLL.Xoa(this._lst[i]);

                        // Xóa file ảnh tương ứng trong thư mục
                        // Trường hợp xóa file ảnh đại diện
                        // Trường hợp xóa file ảnh thường
                        HinhAnhDTO _haDTO = this._lst[i];
                        if (_haDTO.HaConfirm == 1)
                        {
                            Session["HinhAnh"] = null;
                        }
                        string _filename = _haDTO.TenHinhAnh;
                        if (_filename != "product_default_large.jpg")
                            this.DeleteFile(Server.MapPath("../Images\\") + _filename);


                        _id += _haDTO.MaHinhAnh.ToString();
                        if (i < _n2 - 1)
                        {
                            _id += ",";
                        }
                    }

                    // Thông báo cho user biết đã xóa các dòng nào

                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Đã xóa thành công các dòng có ID = " + _id + " ');", true);

                    // Load data vào gridview
                    this.LoadDuLieu();
                }
                else // Ko có checkbox nào được check
                {
                    // Thông báo cho user biết chưa chọn dòng nào
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('Bạn chưa chọn dòng nào để xóa !');", true);

                }
            }
            catch (Exception ex)
            {
                Response.Redirect("../ErrorMessage.aspx?err=" + ex.Message + " ");
            }
        }
        #endregion
    }
}